/**
 * Copyright (C) cedarsoft GmbH.
 *
 * Licensed under the GNU General Public License version 3 (the "License")
 * with Classpath Exception; you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 *
 *         http://www.cedarsoft.org/gpl3ce
 *         (GPL 3 with Classpath Exception)
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 3 only, as
 * published by the Free Software Foundation. cedarsoft GmbH designates this
 * particular file as subject to the "Classpath" exception as provided
 * by cedarsoft GmbH in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 3 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 3 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact cedarsoft GmbH, 72810 Gomaringen, Germany,
 * or visit www.cedarsoft.com if you need additional information or
 * have any questions.
 */

package com.exadel.google;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

public class K7ControllerOld extends Thread implements Registrator {
    final public static String REGISTRATION_PAGE = "http://voicemail.k7.net/signup/";
    final public static String LOGIN_PAGE = "http://voicemail.k7.net/";
    final public static String REGISTRATION_CODE = "1234";
    final public static String EMAIL = "123@smthng.com";
    private String currentPhone;
    BlockingQueue q;
    int timesUsed;

    private WebDriver driver;

    public K7ControllerOld() {
        driver = new FirefoxDriver();
        driver.get(REGISTRATION_PAGE);
        q = new LinkedBlockingQueue(1);
        timesUsed = 0;

    }

    public URL getCaptcha() {
        URL result = null;
        try {
            result = new URL(
                    driver.findElement(By.xpath("/html/body/form/table[5]/tbody/tr[3]/td/div/div/table/tbody/tr[2]/td[2]/div/img")).getAttribute("src"));
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        return result;
    }

    public URL refreshCaptcha() {
        URL result = null;
        try {
            driver.findElement(By.id("recaptcha_reload")).click();
            result = new URL(
                    driver.findElement(By.xpath("/html/body/form/table[5]/tbody/tr[3]/td/div/div/table/tbody/tr[2]/td[2]/div/img")).getAttribute("src"));
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        return result;
    }
    public boolean createAccount(String captcha)
    {
        driver.findElement(By.id("recaptcha_response_field")).sendKeys(captcha);
        driver.findElement(By.name("submit")).click();
        if (driver.getPageSource().contains("Invalid verification codes."))
        {
            return false;
        }
        else {
            currentPhone = driver.findElement(By.xpath("/html/body/table[2]/tbody/tr[3]/td/table/tbody/tr/td")).getText();
            timesUsed++;
            q.offer(1);
            return true;
        }
    }

    public void fillFields(){
        driver.get(REGISTRATION_PAGE);
        driver.findElement(By.name("txtEmail")).sendKeys(EMAIL);
        driver.findElement(By.name("txtEmail2")).sendKeys(EMAIL);
        driver.findElement(By.name("txtPswd")).sendKeys(REGISTRATION_CODE);
        driver.findElement(By.xpath("/html/body/form/table[2]/tbody/tr[2]/td[1]/input")).click();
        driver.findElement(By.xpath("/html/body/form/table[3]/tbody/tr[2]/td[1]/input")).click();
    }


    public void login(String phone) {
        driver.get(LOGIN_PAGE);
        driver.findElement(By.name("Login")).sendKeys(phone);
        driver.findElement(By.name("Password")).sendKeys(REGISTRATION_CODE);
        driver.findElement(By.name("Submit1")).click();
    }

    public String getLastAudioFileUrl() {
        login(currentPhone);

        timesUsed++;
        return driver.findElement(By.xpath("/html/body/table[5]/tbody/tr[2]/td[5]/a")).getAttribute("href");
    }


    public String getCurrentPhone() {
        if (timesUsed % 4 == 0){
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
            }
        }
        return currentPhone;
    }

    public int getTimesUsed() {
        return timesUsed;
    }

    public void close() {
        driver.close();
    }
}
